package model;

import java.util.ArrayList;
import java.util.List;

public class Jogador {
	
	//ATRIBUTOS
	private String nome;
	private int vezDoJogador;
	private List<Peca> pecasJogador;
	private boolean passou = true;
	
	//CONSTRUTOR
	public Jogador() {
		this.pecasJogador = new ArrayList<Peca>();
	}
	
	//METODOS
	public Peca jogaPeca(int posicao){
		Peca peca = pecasJogador.get(posicao);
		pecasJogador.remove(posicao);
		return peca;
	}
	
	public Peca temCarroca(){
		Peca peca = null;
		for (Peca p : pecasJogador) {
			if(p.isCarroca()){
				if(peca == null){
					peca = p;
				}
				if(peca != null && peca.getvLeft() < p.getvLeft()){
					peca = p;
				}
			}
		}
		return peca;
	}
	
	public String listaDePecasJogador() {
		String pecas = "";
		for (int i = 0; i < pecasJogador.size(); i++) {
			pecas += "(" + (i) + ") - " + pecasJogador.get(i).toString()+"\n";
		}
		return pecas; 
	}
	
	public int jogadorContaPontos(){
		int pontosJogador=-1;
		for (Peca peca : pecasJogador) {
			pontosJogador += peca.getvLeft() + peca.getvRigth();
		}
		return pontosJogador;
	}
	
	public void jogadorPassou(){
		passou = false;
	}
	
	public void jogadorJogou(){
		passou = true;
	}
	
	//GETTERS E SETTERS
	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}
	public int getVezDoJogador() {
		return vezDoJogador;
	}
	public void setVezDoJogador(int vezDoJogador) {
		this.vezDoJogador = vezDoJogador;
	}
	public List<Peca> getPecasJogador() {
		return pecasJogador;
	}
	public void setPecasJogador(List<Peca> pecasJogador) {
		this.pecasJogador = pecasJogador;
	}
	public boolean isPassou() {
		return passou;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((nome == null) ? 0 : nome.hashCode());
		result = prime * result
				+ ((pecasJogador == null) ? 0 : pecasJogador.hashCode());
		result = prime * result + vezDoJogador;
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Jogador other = (Jogador) obj;
		if (nome == null) {
			if (other.nome != null)
				return false;
		} else if (!nome.equals(other.nome))
			return false;
		if (pecasJogador == null) {
			if (other.pecasJogador != null)
				return false;
		} else if (!pecasJogador.equals(other.pecasJogador))
			return false;
		if (vezDoJogador != other.vezDoJogador)
			return false;
		return true;
	}

}
